FPT Version Five

Search Algorithm

Author

Jessica Helmer

Published

April 2, 2026

Code
library(tidyverse)
Code
dn_dat_c <- readRDS(here::here("Data", "Denominator Neglect", "dn_dat_c.rds"))

bu_dat_h <- readRDS(here::here("Data", "Bayesian Update", "bu_dat_h.rds"))

admc.dr_dat <- readRDS(here::here("Data", "ADMC Decision Rules", "admc.dr_dat.rds"))

ns_dat <- readRDS(here::here("Data", "Number Series", "ns_dat.rds"))

dn_dat_s <- readRDS(here::here("Data", "Denominator Neglect", "dn_dat_s.rds"))

bu_dat_e <- readRDS(here::here("Data", "Bayesian Update", "bu_dat_e.rds"))

ts_dat <- readRDS(here::here("Data", "Time Series", "ts_dat.rds"))

dn_top_items_c <- readRDS(here::here("Data", "Denominator Neglect", "top_items.rds"))
dn_top_items_s <- readRDS(here::here("Data", "Denominator Neglect", "top_items_s.rds"))

startup_costs <- readRDS(here::here("Data", "startup_costs.rds"))
Code
source(here::here("Scripts", "get_startup.R"))
Code
dn_dat_c <- dn_dat_c |>
  left_join(dn_top_items_c |> 
              pivot_longer(c(conf_item, harm_item),
                           names_to = "choice_type", values_to = "item") |>
              select(item, rank),
            by = "item") |>
    mutate(task = "dn.c",
           item = paste0(task, "_", rank),
           # still need time per item
           time = (3.43 - get_startup(first(task))) /
             (length(unique(item)) * 2),
           score = correct,
           .keep = "unused") |>
    select(subject_id, sscore, task, item, score, time)

dn_dat_s <- dn_dat_s |>
  left_join(dn_top_items_s |> 
              pivot_longer(c(conf_item, harm_item),
                           names_to = "choice_type", values_to = "item") |>
              select(item, rank),
            by = "item") |>
    mutate(task = "dn.s",
           item = paste0(task, "_", rank),
           # still need time per item
           time = (4.45 - get_startup(first(task))) /
             (length(unique(item)) * 2),
           score = correct,
           .keep = "unused") |>
    select(subject_id, sscore, task, item, score, time)
Code
bu_dat_h <- bu_dat_h |>
    mutate(task = "bu.h",
           item = paste0(task, "_", unique_trial),
           time = (6.56 - get_startup(first(task))) /
             (length(unique(item))),
           .keep = "unused") |>
    select(subject_id, sscore, task, item, score, time)

bu_dat_e <- bu_dat_e |>
    mutate(task = "bu.e",
           item = paste0(task, "_", unique_trial),
           time = (7.26 - get_startup(first(task))) /
             (length(unique(item))),
           .keep = "unused") |>
    select(subject_id, sscore, task, item, score, time)
Code
admc.dr_dat <- admc.dr_dat |>
    mutate(task = "admc.dr",
           item = paste0(task, "_", parse_number(admc_id)),
           time = (5.87 - get_startup(first(task))) /
             (length(unique(item))),
           .keep = "unused") |>
    select(subject_id, sscore, task, item, score, time)
Code
ns_dat <- ns_dat |>
    mutate(task = "ns",
           item = paste0(task, "_", parse_number(ns_id)),
           time = (3.70 - get_startup(first(task))) /
             (length(unique(item))),
           .keep = "unused") |>
    select(subject_id, sscore, task, item, score, time)
Code
ts_dat <- ts_dat |>
    mutate(task = "ts",
           item = paste0(task, "_", ts_id),
           time = (5.83 - get_startup(first(task))) /
             (length(unique(item))),
           .keep = "unused") |>
    select(subject_id, sscore, task, item, score, time)
Code
v5_dat <- rbind(dn_dat_c, 
                bu_dat_h,
                admc.dr_dat,
                ns_dat,
                dn_dat_s,
                bu_dat_e,
                ts_dat)

v5_dat |> 
  filter(is.na(score)) |>
  summarize(.by = c(subject_id, task), 
            n = n())
              subject_id task  n
1   Ac5ZMy5LVkFjQHr2ucen dn.c  1
2   xerEAhCM3QCii740dMOT dn.c  1
3   nmy4BvIJvHgW6RKgnx5i dn.c  1
4   e8cXE9s9upZtFqszDShQ dn.c  2
5   SstzyshA6P3MsHarAJOC dn.c  1
6   R0BAq19ThveXTuFrNFWR dn.c  1
7   v8OOr4HHwaTU8MdlBiNe dn.c 48
8   fkOJ1NbnRk71F9aGqXWl dn.c 48
9   J97ljhO3gdtigy2V3olp dn.c 48
10  gAL0DiMvJc0jSvoR8Baq dn.c 48
11  LSSNI9CJdMEB7kIIdv1j dn.c  1
12  Opi65eyMrbyYjB5bwRMP dn.c  1
13  PPoF7VmcJfI5PN9okf0T dn.c  1
14  YV20vaAnaPndIGbTNCyi dn.c 48
15  FqMdeNMqacNOMwDGxovJ dn.c  1
16  L431K0ZDgV4wqUR7XTeo dn.c  1
17  A8SHBz2S8Ui095L35Wjh dn.c 48
18  1h05DmzN29B6FZZR67pP dn.c  1
19  BpXGyUgvqzapjyMB15Zy dn.c 48
20  CNX9AP2rnXxONuGYEalT dn.c 12
21  6jOSL0IZbcNJOVzNEMr7 dn.c  1
22  Xf5wK1xsRt5nKLDYQwop dn.c  1
23  xSvzfB9wIjnw2QuEb9Ba dn.c  2
24  4rY5i0hQ8qKc3mBAnAwT dn.c  9
25  E3hK4Etw5ylsn1SsXH8S dn.c 48
26  0WgPYP5L2MNMyFtsWEaG dn.c  1
27  QLyEuiyGskZKXWMVQm4M dn.c  1
28  DRrgI3jzHMjID8Q48PjB dn.c 48
29  Y2lFlepXHqWUFbEKCNwq dn.c  1
30  xDJ0JpfeWhke1GvUwHem dn.c 48
31  j49ae9H3AT6mRC6ygqv8 dn.c 48
32  YxsciWh4LBDtAl6lLunN dn.c 48
33  ifcG7cR8IYUd48e11ERX dn.c  6
34  hf6J6yzRivfwR2Elyo9N dn.c  2
35  0REiwYHX47zX4qbePYjN dn.c  1
36  SNsBrz8Txh3QpNgGXGtE dn.c  1
37  1E9KZrTTpuJ3KjJa8cDV dn.c  6
38  fRYcCiEcUwRJIA0mQ2o7 dn.c 48
39  tRvesqPE5A0iKVY6G8g8 dn.c 48
40  VwvZLU4OilnAvOArxYc7 dn.c  1
41  DXeOGqQEgoEt16VOuaOn bu.h  2
42  Ac5ZMy5LVkFjQHr2ucen bu.h  4
43  HqfnXYULelL4tEtMA05t bu.h  2
44  CPwdHnAnqZuJJEvQdgWC bu.h  1
45  G06vCKjuln4m6u6CPQEn bu.h  1
46  ZP9yL6PFVQSvSIC7bUee bu.h  1
47  R6U0YqqdHfgqkWkuCagF bu.h  1
48  2t8eqhwiUfiSDnWfoHBW bu.h  1
49  fkOJ1NbnRk71F9aGqXWl bu.h  2
50  V2ME98SReEaOQ3fhFVst bu.h  1
51  950AzNMugIUFBNRmlDCF bu.h  3
52  kiTl14IWGtRXdVVJmZgD bu.h  1
53  ADb2b1AvtBmftDmWdKWN bu.h  2
54  vbGZVDJU7u0ApalOtBTF bu.h  1
55  EECGDwmWAmWfpKKnYI7O bu.h  1
56  XjY03SGFqyp7HmUABJbW bu.h  1
57  vw9RHgQ3UaaTe1nfjJc0 bu.h  2
58  IeElhKAlZlvb0pPCNyJQ bu.h  1
59  HngYolsZ7LnwhMepx4yf bu.h  1
60  383KleAMN0hXjU1qXdYJ bu.h  1
61  CKbheN9Pot7GaZpfPYe5 bu.h  1
62  BpXGyUgvqzapjyMB15Zy bu.h  1
63  DoFCE00qFvG0xBr3UWpI bu.h  1
64  zANbOJqdtyEpAq00umSb bu.h  5
65  IJumhtN8oKoYEDbFfUMf bu.h  1
66  j5bxfVlajJwn5pZNQQsa bu.h  1
67  TqSddjjditUnblQcWfB3 bu.h  2
68  Hy5g7Y3sJf9BcHPqEZ8p bu.h  1
69  2QJZGGcIQF8A5FhBmyuz bu.h  1
70  OJ5jre57VnjtURyBCSjz bu.h  1
71  mXMCaULEkFF6s1prItB8 bu.h  1
72  771cxdbg1Rw25ZLqI3Ge bu.h  2
73  49bWZY1TC7zcMYq4FzkX bu.h  1
74  4rY5i0hQ8qKc3mBAnAwT bu.h  2
75  ItLyRC07hxMbcaguQBkl bu.h  1
76  A7wLmahMacmd6RniSE0h bu.h  1
77  cU37HwPJT7ClWoOdeIB0 bu.h  1
78  0WgPYP5L2MNMyFtsWEaG bu.h  1
79  Cxv3OL9bAloZXz0mUogg bu.h  1
80  5FK6Vbwq2sUGNtVEgaFU bu.h  1
81  fCMnEWhTh7kuGhOSMhTC bu.h  2
82  kEsM4qtWu3c24cxLGja3 bu.h  1
83  mgLxjjWNdkpi3rxUB07l bu.h  2
84  17LEM8wPQyshaga81mOO bu.h  1
85  QQA4FUKgerUT0TLEFFgK bu.h  1
86  Ps3jaWnRHhoNNeL3PDa4 bu.h  1
87  TJQ9j6A05f8ld8OK8Mzc bu.h  2
88  jtvtTOMSmoqa3cP4vWFw bu.h  1
89  3lGsczpaOxmDeZmuT7yz bu.h  1
90  oXDopHMLUvv9ZYWc4WY0 bu.h  1
91  kovEJOLHZyADSgwnqPga bu.h  3
92  MJzHLwX8uDBLf5PVpvm3 bu.h  1
93  gMVww8j5DaVLpC3Yj8nr bu.h  1
94  oy61qtPF4pg4R3ABVbJj bu.h  2
95  LxtXIECwYcSxnNetzXg7 bu.h  1
96  0REiwYHX47zX4qbePYjN bu.h  1
97  jnddVA5OnRXjgyBHLhkr bu.h  1
98  jZF8v6PoTY6RXiFVy6gY bu.h  1
99  n76EcPNePczVQ85qQtbB bu.h  1
100 z8N4Pa7qb9TeTYKUwAeQ bu.h  6
101 IB0qJtGPs6xL8JRpYuBt bu.h  2
102 bjusHaMvMJEVS8XmZ80t bu.h  6
103 RFOrWXAQX1PO0HFZwlLL bu.h  1
104 xoO6skepz0KramQLSPL9 bu.h  1
105 CBjFu6W7QeUIwHec5mC1 dn.s  1
106 3lUidRlitol2ksRqEJvN dn.s  2
107 tRvesqPE5A0iKVY6G8g8 dn.s 48
108 BgX9DZHT7atuF2UAoakM dn.s  2
109 yXJcaIASTUm1jt5BV2Mm dn.s  1
110 8FYM23YbIrj3Ofx7LMoo dn.s  1
111 uDwAuOeTAbfEsISlrm7L dn.s  1
112 QkP1503G1oAEIoPcmYmF dn.s  1
113 ASNPnjJhR3uNgopLHQ9Y dn.s  2
114 KVdaeOj3Eyn3hnPNiffK dn.s  1
115 vSgAkbmZBhLr5kGKihkG dn.s  1
116 fGcn13Dce53Ic5t7KUSy dn.s  1
117 gAL0DiMvJc0jSvoR8Baq dn.s 48
118 yWx2uJPTKZJGfAOeaat6 dn.s  1
119 0FX5rBebJhUn0z8tQid9 dn.s  2
120 g3iCPU6zUjzgEz6cwB61 dn.s  1
121 ym15ZZj8Df0uNAuodXn8 dn.s  1
122 1dxR6XNJvb17STmiEGyG dn.s  1
123 8SvO5adegSRe2a8FwTg0 dn.s 11
124 qy5e2BKyVAdHLE9Ft3KP dn.s  1
125 64RVc86LLeI6qccFOAs0 dn.s  1
126 j49ae9H3AT6mRC6ygqv8 dn.s 48
127 DoFCE00qFvG0xBr3UWpI dn.s  1
128 GFZDz69YiwKEpC8nh3Kc dn.s  2
129 nvEdRy29lvIepo6irKSa dn.s  1
130 vINjSqfdP97CnGjw7CAg dn.s  1
131 j5bxfVlajJwn5pZNQQsa dn.s  2
132 amrWtFuaQvSMbkuuP4XO dn.s  1
133 0BfdNKn6rbHBPfFmtL64 dn.s  2
134 HFmXofKOwruJkX7ka6yA dn.s  1
135 DRrgI3jzHMjID8Q48PjB dn.s 48
136 cAYYkpIxMiubqvZJv80N dn.s  1
137 YxsciWh4LBDtAl6lLunN dn.s 48
138 wQtadQgeGBUtR1EtHfet dn.s  1
139 YV20vaAnaPndIGbTNCyi dn.s 48
140 WAWHoPe5JEKCIYk7egYV dn.s  1
141 JlC8vtBxKJRSYnZxy3cS dn.s  1
142 B4CiC8xT1jfHRpXt5XKT dn.s  1
143 hsTC8X9J3MHKvrWSPSGp dn.s  1
144 EJEY58XUQs9PBiy63T8T dn.s  3
145 kEsM4qtWu3c24cxLGja3 dn.s  1
146 TJQ9j6A05f8ld8OK8Mzc dn.s  1
147 fkOJ1NbnRk71F9aGqXWl dn.s 48
148 WTslF06a8nHFUAWr3vIT dn.s  1
149 aEalfO2zYVQmNGz6LclE dn.s  3
150 J97ljhO3gdtigy2V3olp dn.s 48
151 Opi65eyMrbyYjB5bwRMP dn.s  1
152 E3hK4Etw5ylsn1SsXH8S dn.s 48
153 xDJ0JpfeWhke1GvUwHem dn.s 48
154 kr9CWXPe1Jc4tybB5TDJ dn.s  1
155 QMFZxe3WbmxMlJ9c7oxx dn.s 48
156 xcMkFsNfZNXsd3qP1DVF dn.s  1
157 v8OOr4HHwaTU8MdlBiNe dn.s 48
158 ZDYUvh7i71S87XwXaHCP dn.s  1
159 P0st9aEQhaLhgmDZBdhz dn.s  1
160 IB0qJtGPs6xL8JRpYuBt dn.s  1
161 o24iqAR0WC7cR2ZkNHie dn.s  1
162 OmDvk4v7NxuhAnLBrkbW dn.s  1
163 gIVXFcb4XIgyVfkGHGYP dn.s  1
164 FqMdeNMqacNOMwDGxovJ dn.s  1
165 LGXgT64J11f1BZzL8rQf dn.s  1
166 9eUKJ1MDRhFJ0kdt2ikq dn.s  1
167 wvOpOK4esubuC1J3qRK9 dn.s  1
168 jOtySWDeJ7rf9lxtAQzX dn.s  1
169 3LlGLQjPsYvg4P5YSea5 dn.s  1
170 Cxv3OL9bAloZXz0mUogg dn.s  2
171 OQBbRgSRcYyepR1DfiXP dn.s  3
172 zPdJNnMEELaOlKvgj0xS dn.s  1
173 oF9hBAnlrGYSa56Xj8G1 dn.s  3
174 zlPLQKWkCJ5fswxeAIsi dn.s  1
175 D8ziemVuGzthoise1ShM dn.s 48
176 Q6i1DNEvpyBBDntIgDg4 bu.e  1
177 49bWZY1TC7zcMYq4FzkX bu.e  2
178 jnddVA5OnRXjgyBHLhkr bu.e  1
179 4FSjZtJEUXGQaNQXwR2P bu.e  1
180 TKO2Alhu9oJQR8IzF5eI bu.e  1
181 8FYM23YbIrj3Ofx7LMoo bu.e  1
182 hI7JpYtbCLvNfC1JPRxp bu.e  3
183 Je7hQucSMLQWqrCCwqTD bu.e  1
184 NEzK3RrTXr3H711C5ner bu.e  1
185 zbI7AUMspFhHJsUyyaY2 bu.e  1
186 fGcn13Dce53Ic5t7KUSy bu.e  1
187 yWx2uJPTKZJGfAOeaat6 bu.e  1
188 izXbHR0eYoPO82zpM9ci bu.e  1
189 p9lkjNp3qQogD4OUaedm bu.e  1
190 iJuHugYdAhBzELotbBWp bu.e  2
191 BxdFCeWLf8nCNjrDcwKt bu.e  2
192 bRtADGpq7hsZ7dqIDhah bu.e  1
193 Ac5ZMy5LVkFjQHr2ucen bu.e  3
194 dDr1YyBAyPfLjg9qDv1Y bu.e  1
195 Mdmz1IMWbMN65ldqchyZ bu.e  1
196 7oqtXRTtqemWKjkCzH7m bu.e  2
197 HEX7q9dj3YP6yeKjY1io bu.e  1
198 j5bxfVlajJwn5pZNQQsa bu.e  3
199 pg3CssQWWIcR6REE3TFo bu.e  2
200 z8N4Pa7qb9TeTYKUwAeQ bu.e  2
201 HFmXofKOwruJkX7ka6yA bu.e  2
202 DRrgI3jzHMjID8Q48PjB bu.e  1
203 D3ShceKj3iyKrXmCrB7j bu.e  1
204 tGZegyyiWppuB0tUkXWz bu.e  1
205 omfSFxzu7MrjjSSafj2q bu.e  1
206 a5F2j7cvabLVMfvG55nK bu.e  2
207 R6U0YqqdHfgqkWkuCagF bu.e  1
208 950AzNMugIUFBNRmlDCF bu.e  3
209 O88gcs0iBczTV5V6mLTh bu.e  1
210 fkOJ1NbnRk71F9aGqXWl bu.e  1
211 E3hK4Etw5ylsn1SsXH8S bu.e  1
212 AhirSY1w8dBzmuo2t48W bu.e  1
213 Ayo5YHWlCQsHNV7XrQc7 bu.e  1
214 d7pCGcyjbWTZyaOtM2w1 bu.e  1
215 oEQ7OxQXOW1OrOwhfEPF bu.e  5
216 XGaVXviFC59TLyx7AKLq bu.e  1
217 fRN2BqpepgaxT82ExHgD bu.e  1
218 OcE6oQcbHzuzftyyrdB6 bu.e  3
219 h1VVrAsMOlTSjgsxu07s bu.e  1
220 0REiwYHX47zX4qbePYjN bu.e  2
221 OmDvk4v7NxuhAnLBrkbW bu.e  1
222 Ewp3WFDEQVhQx6UMUAiN bu.e  2
223 9eUKJ1MDRhFJ0kdt2ikq bu.e  1
224 s0XXgsxyI4HqXAssoIP2 bu.e  1
225 6UwmqiWhZgQPMStTzRH0 bu.e  1
226 5rHhraHsUTAqh6sjU2d1 bu.e  1
227 Yfk4ShUhELUtl9XwpgCa bu.e  1
228 TqSddjjditUnblQcWfB3 bu.e  3
229 54siyd3BYjsh1mVk7R0Z bu.e  1
230 zPdJNnMEELaOlKvgj0xS bu.e  1
231 LmdItKKcaTPAwe0Ym4Od bu.e  1
232 IOGwmjH1oX4unT6cb6gy bu.e  1
233 RsRxUuQovzhFUap8a01P bu.e  1
234 9fNzCWLAlFIBwlLJ0oFz bu.e  1
235 Bipzf7LJ6qdGqAscZzBg bu.e  5
236 5PP2t16GSzChbtte5vVw bu.e  1
237 7g48cSLs8jYPIKalXiUZ   ts  1
238 KyeFByJ933id8W7P6j77   ts  1
239 hSH8uwdznJPF9W8CTA2w   ts  1
240 THM75FY0853siUB2wF5J   ts  1
241 Mtt1LXmZWBninK3ggSK5   ts  1
242 khYao3bQxAh4FNPIXDxa   ts  1
243 w8EG0W8jl0IbL9HsENCg   ts  1
244 4ErLxgNrw5giUuWzjjsm   ts  1
245 tRvesqPE5A0iKVY6G8g8   ts  1
246 iCXyy2xK8DDsgTtrf8kW   ts  2
247 boffKPQBu09LdqOpXQOe   ts  1
248 REcum50sJgQSYvBMQXwc   ts  1
249 49bWZY1TC7zcMYq4FzkX   ts  1
250 TKkwOc2pHd9PObQzxHDj   ts  1
251 jyeyCfCN3CfT45Vmut9E   ts  1
252 BgX9DZHT7atuF2UAoakM   ts  2
253 rwXh4OtqsjeCqJsJDrVf   ts  2
254 EtulJVHuPSc3ZLVKBPtb   ts  1
255 CFx2CdZ1bSxA6JPb6SA6   ts  1
256 4FSjZtJEUXGQaNQXwR2P   ts  3
257 TKO2Alhu9oJQR8IzF5eI   ts  1
258 G6LvMujrQyj0EAuVo6Uq   ts  1
259 4zCxjdZQSFAMBokcJ98T   ts  1
260 Je7hQucSMLQWqrCCwqTD   ts  1
261 QkP1503G1oAEIoPcmYmF   ts  1
262 NxDOJ5WGiu7vMzc0jfg5   ts  3
263 fAPx69vDlA8qSfqNFaag   ts  1
264 FQCQhjkNqqJrCXXHGWyM   ts  1
265 KdXV17I3V0fPvMAidxdb   ts  1
266 5KVDGaVVAHsiHJMjLWGH   ts  1
267 RIcuhrLt8BIs1le0DQl9   ts  1
268 3JAbXWzVHjOfIJvN5nIY   ts  1
269 EjoIAEzk6UUhC7y9F0Ry   ts  1
270 TJns5NZcCMEwMuva3lvg   ts  1
271 nNv1U7RDvAlO10CNVduv   ts  1
272 j3wPPP2j4S3VgnpmBFvH   ts  1
273 OnWF9xAaNJRvOuX00KEc   ts  2
274 wUFqN9bUAEkgPgUV5sqO   ts  1
275 3HNTHcsl7dZ2TGlwR4g6   ts  1
276 Ayo5YHWlCQsHNV7XrQc7   ts  2
277 etnyKJ3NA8vLJWQgHIDJ   ts  1
278 d7pCGcyjbWTZyaOtM2w1   ts  1
279 piTJXDJA6kamnbAqQVSc   ts  1
280 YhKp6PmpkSO7X4aGjYB9   ts  1
281 3RVHWOebZPPvYZwkVRaC   ts  1
282 umV9t8yhNwHqLYO7llmI   ts  2
283 LBg0xU9XZnPijXtSAo67   ts  2
284 ekGBkEpWxMdbx2WL17xl   ts  1
285 Q5v7vEQrx6bW7SNYTjUD   ts  1
286 3WOzLROmRBgFy8GAfJZx   ts  5
287 9IlG6nRRZkN1ZsoqsxCM   ts  1
288 BdgTQ1C8QkSCuLiWUM6G   ts  1
289 2fYxvQc1czvRDcT8JM7B   ts  2
290 McZsAbJxyBZkxN6R06tL   ts  1
291 g3iCPU6zUjzgEz6cwB61   ts  1
292 Gm5YDXVt591FIqCgxMtr   ts 16
293 Fvv0ALwZPTKLL7OVVBmn   ts  1
294 2pScWifucpmQZvXoZCw3   ts  1
295 tKTrELf8YVSKMU6GH0tn   ts  1
296 ZDYUvh7i71S87XwXaHCP   ts  1
297 s7mJzZjHp4ae1qDeD85E   ts  1
298 03spmysv917pRTSkTcj6   ts  1
299 iJuHugYdAhBzELotbBWp   ts  1
300 6fGC9DJqZxA4MXTQX8Sd   ts  2
301 vbGZVDJU7u0ApalOtBTF   ts  2
302 O0NYuwahmBnGRb5IPZGa   ts  1
303 kovEJOLHZyADSgwnqPga   ts  1
304 0REiwYHX47zX4qbePYjN   ts  3
305 R81zDdBsjgGbqyqUWMQT   ts  3
306 eBDrjMp7gbOV17PYLZad   ts  1
307 nRnUY9CTiB7LVJe7haxE   ts  1
308 R6M8a2s8Oin7lhCtFEhQ   ts  1
309 eO2fxGLcdC5k0aGuROZx   ts  1
310 o24iqAR0WC7cR2ZkNHie   ts  1
311 I9oLuP4O3GOIbYravzP8   ts  1
312 g7rIRsOq2kkH8pYaz7fR   ts  1
313 Mdmz1IMWbMN65ldqchyZ   ts  1
314 64RVc86LLeI6qccFOAs0   ts  1
315 CRGZ4TavntGH5E9LSBCX   ts  1
316 DH0T6zFub589qUF0B702   ts  1
317 0i0wZSbTdy53z6Cni0Dl   ts  1
318 SJdYRJAFtFnPuPXeDtZ9   ts  1
319 rhddayHF97oSYI7UrdRt   ts  1
320 nabsPHGZpvr6SgYzV2am   ts  1
321 5EPXWl4PDme2kqXHiOBB   ts  1
322 qDI6xFzx1uEgAvcPXYms   ts  2
323 ZyEbe7eQxt4YlalJLb89   ts  2
324 JhW3ezpIB8sBZJ76QQ2b   ts  1
325 4CLdS8XZEmJVDlHImT7u   ts  1
326 3TUTJUD20hg4uydW0nPU   ts  1
327 tLdDkwsFunR4YoLKVhDr   ts  1
328 PYH1CXUkU4mAxBsW5UHi   ts  1
329 G2WGBZc9GyTIFNdsysZC   ts  1
330 yL2xNKGqpeaOzg95CDUB   ts  1
331 s0XXgsxyI4HqXAssoIP2   ts  1
332 zKG5mSoyPstUeC99enq5   ts  1
333 AsoaxzIykTyxqAoV4YQr   ts  1
334 9eUKJ1MDRhFJ0kdt2ikq   ts  2
335 DoFCE00qFvG0xBr3UWpI   ts  1
336 bW7vftpeg6L47YzZjzWX   ts  1
337 cRpM8Z159NED2UYcb3jT   ts  1
338 nvEdRy29lvIepo6irKSa   ts  1
339 jOtySWDeJ7rf9lxtAQzX   ts  1
340 roz2c3opqAFnyNPbzR3h   ts  1
341 qpQ1vSLveBFouxZzN2iu   ts  1
342 076BrNISK0IP8PsESVQX   ts  1
343 6rPerw3fPtggey7LPj6X   ts  1
344 zdKF1SXibeBH26CpiufK   ts  1
345 i8uVNjD6U5P2koFh3qw1   ts  1
346 HQtaLSwh8MGTTpLVllOE   ts  2
347 qexjC6y4MMUWHAt5bqvh   ts  1
348 5rHhraHsUTAqh6sjU2d1   ts  1
349 j5bxfVlajJwn5pZNQQsa   ts  3
350 gYlhCVSj5pa1VFbFdicj   ts  2
351 jZF8v6PoTY6RXiFVy6gY   ts  3
352 hmUKEUxhdCzEzo2q7PpI   ts  1
353 ArWJ1aLAwP2t66pdDGqy   ts  1
354 6jOSL0IZbcNJOVzNEMr7   ts  2
355 771cxdbg1Rw25ZLqI3Ge   ts  1
356 O0yVeeQVT2OJE6mbt5wl   ts  1
357 tMR3y87RWvjTV5kdfi2h   ts  1
358 dFi2sGOS1gEWWg2KDXcs   ts  1
359 CVmfiQuobm1ux4zBp3l4   ts  1
360 kSZ3wZkDtJRrYLpi4ojs   ts  1
361 LT2PWfa1d0t3mjn0w4KZ   ts  1
362 j1lSAtVBMhimMpC1Ha2o   ts  1
363 4MXqlRYjANDHSM003I2c   ts  1
364 9NyaXPkKlfyjubys7IoE   ts  1
365 g00rVq4jB6nBvbdFo9xb   ts  1
366 BiyqZv07wmeZOboeTfnw   ts  1
367 sUE4VAmCISZvzsFH49BK   ts  1
368 imxFcTXtwyNUY9uOjkct   ts  1
369 Yfk4ShUhELUtl9XwpgCa   ts  6
370 vNUhkysUUHxRDi1a5BQ7   ts  1
371 9YaeRGOTkxRml6BYldlV   ts  1
372 CtPuhMjKdihqEsXucpww   ts  1
373 54TEF4eZN23KZglG8kHT   ts  2
374 kgAJm1lblz7JIf8qQqZd   ts  1
375 wQtadQgeGBUtR1EtHfet   ts  2
376 TqSddjjditUnblQcWfB3   ts  2
377 azeC5Kk3x946Oj4L6HnU   ts  1
378 uKYfZr65pq4KTBvCj3dE   ts  1
379 hOdVHTzPBsd26UMRFL3Q   ts  1
380 VLLHim4Q2j7wFMmMQbHq   ts  1
381 jdJRtSyyTamNP0WYAaei   ts  1
382 5akYQwXPqMXUdUwTlseA   ts  1
383 3b8X79WU0YWVcsmFGeEH   ts  4
384 4rY5i0hQ8qKc3mBAnAwT   ts  1
385 eNXtdvWDFDTA7Xrc5UTI   ts  1
386 kEsM4qtWu3c24cxLGja3   ts  2
387 a5F2j7cvabLVMfvG55nK   ts  2
388 xSvzfB9wIjnw2QuEb9Ba   ts  1
389 IIeCbY9dM0C04giDl66U   ts  1
390 RFOrWXAQX1PO0HFZwlLL   ts  2
391 Rw1m2pue8CmVp1Gbe9Aj   ts  1
392 SqhyFLTUrs6u8geASTKe   ts  2
393 p7jxXch3zyEvD9B92JRQ   ts  1
394 mCN7iUcxW0yZqmQaO7U8   ts  2
395 ct6awrymUS8RgzTgYjKx   ts  2
396 GPD6F9DZ5KZ649zqEkmE   ts  2
397 JYNcLggG6xeng7vhONOS   ts  1
398 QygIO2O30zG9kOeA6yaW   ts  1
399 E89vWsrHcs2BX0H9x10k   ts  1
400 TJQ9j6A05f8ld8OK8Mzc   ts  1
401 BvKCMACzXtxloOwf0FNW   ts  1
402 fkOJ1NbnRk71F9aGqXWl   ts  1
403 aEalfO2zYVQmNGz6LclE   ts  1
404 WTslF06a8nHFUAWr3vIT   ts  1
405 GoEd9Sf53GRx8ffiYeJA   ts  1
406 3G6evfXk2aaHFUO4NsWt   ts  3
407 J97ljhO3gdtigy2V3olp   ts  1
408 XZ6kYLrylUTUVmi9Moii   ts  1
409 GexzYjhJP1cjPlyIYmBj   ts  1
410 YgxWHqtXkNX2ukZ9kiCy   ts  1
411 T8uRDr68JjJ4BQT3iIty   ts  1
412 qXLy4pIlDDDoNenqCw3e   ts  1
413 UIFwra15oVwoFsQMfzB2   ts  1
414 I6mfBMKbR5exUiCNwo3s   ts  1
415 iqav0EdhDGMWKHeygaoS   ts  1
416 9f0qLvOeqUpquuahieMQ   ts  1
417 1EicOlsQbZR2weQYUSE4   ts  1
418 HtYDZw69CrxG7YXipN2I   ts  4
419 klZuuzk47ZvpyRkPJaZf   ts  1
420 yMeSz76Rr9eoJcLNUcyC   ts  2
421 KDppLvc9sRPP1RRTXUbx   ts  1
422 NH3PiPNoQ05mlw2FESiA   ts  1
423 XcEGK0YT24vUTt758M2g   ts  1
424 9nohyzDvZOZcWfHHxyyl   ts  1
425 jtLHDBCHTQmFdAKk960m   ts  1
426 3v8cpIfuZbk4rsihgtbl   ts  1
427 qcx2RIuXihoDjqT84xfl   ts  1
428 Dww6f9XWMbmfz4VOw6gr   ts  2
429 SC2x1sOCmOGfCQ69ipBT   ts  3
430 AMdGiZCShW6RizBlKSmC   ts  1
Code
v5_dat |> 
  filter(is.na(score)) |>
  summarize(.by = subject_id, 
            n = n())
              subject_id   n
1   Ac5ZMy5LVkFjQHr2ucen   8
2   xerEAhCM3QCii740dMOT   1
3   nmy4BvIJvHgW6RKgnx5i   1
4   e8cXE9s9upZtFqszDShQ   2
5   SstzyshA6P3MsHarAJOC   1
6   R0BAq19ThveXTuFrNFWR   1
7   v8OOr4HHwaTU8MdlBiNe  96
8   fkOJ1NbnRk71F9aGqXWl 100
9   J97ljhO3gdtigy2V3olp  97
10  gAL0DiMvJc0jSvoR8Baq  96
11  LSSNI9CJdMEB7kIIdv1j   1
12  Opi65eyMrbyYjB5bwRMP   2
13  PPoF7VmcJfI5PN9okf0T   1
14  YV20vaAnaPndIGbTNCyi  96
15  FqMdeNMqacNOMwDGxovJ   2
16  L431K0ZDgV4wqUR7XTeo   1
17  A8SHBz2S8Ui095L35Wjh  48
18  1h05DmzN29B6FZZR67pP   1
19  BpXGyUgvqzapjyMB15Zy  49
20  CNX9AP2rnXxONuGYEalT  12
21  6jOSL0IZbcNJOVzNEMr7   3
22  Xf5wK1xsRt5nKLDYQwop   1
23  xSvzfB9wIjnw2QuEb9Ba   3
24  4rY5i0hQ8qKc3mBAnAwT  12
25  E3hK4Etw5ylsn1SsXH8S  97
26  0WgPYP5L2MNMyFtsWEaG   2
27  QLyEuiyGskZKXWMVQm4M   1
28  DRrgI3jzHMjID8Q48PjB  97
29  Y2lFlepXHqWUFbEKCNwq   1
30  xDJ0JpfeWhke1GvUwHem  96
31  j49ae9H3AT6mRC6ygqv8  96
32  YxsciWh4LBDtAl6lLunN  96
33  ifcG7cR8IYUd48e11ERX   6
34  hf6J6yzRivfwR2Elyo9N   2
35  0REiwYHX47zX4qbePYjN   7
36  SNsBrz8Txh3QpNgGXGtE   1
37  1E9KZrTTpuJ3KjJa8cDV   6
38  fRYcCiEcUwRJIA0mQ2o7  48
39  tRvesqPE5A0iKVY6G8g8  97
40  VwvZLU4OilnAvOArxYc7   1
41  DXeOGqQEgoEt16VOuaOn   2
42  HqfnXYULelL4tEtMA05t   2
43  CPwdHnAnqZuJJEvQdgWC   1
44  G06vCKjuln4m6u6CPQEn   1
45  ZP9yL6PFVQSvSIC7bUee   1
46  R6U0YqqdHfgqkWkuCagF   2
47  2t8eqhwiUfiSDnWfoHBW   1
48  V2ME98SReEaOQ3fhFVst   1
49  950AzNMugIUFBNRmlDCF   6
50  kiTl14IWGtRXdVVJmZgD   1
51  ADb2b1AvtBmftDmWdKWN   2
52  vbGZVDJU7u0ApalOtBTF   3
53  EECGDwmWAmWfpKKnYI7O   1
54  XjY03SGFqyp7HmUABJbW   1
55  vw9RHgQ3UaaTe1nfjJc0   2
56  IeElhKAlZlvb0pPCNyJQ   1
57  HngYolsZ7LnwhMepx4yf   1
58  383KleAMN0hXjU1qXdYJ   1
59  CKbheN9Pot7GaZpfPYe5   1
60  DoFCE00qFvG0xBr3UWpI   3
61  zANbOJqdtyEpAq00umSb   5
62  IJumhtN8oKoYEDbFfUMf   1
63  j5bxfVlajJwn5pZNQQsa   9
64  TqSddjjditUnblQcWfB3   7
65  Hy5g7Y3sJf9BcHPqEZ8p   1
66  2QJZGGcIQF8A5FhBmyuz   1
67  OJ5jre57VnjtURyBCSjz   1
68  mXMCaULEkFF6s1prItB8   1
69  771cxdbg1Rw25ZLqI3Ge   3
70  49bWZY1TC7zcMYq4FzkX   4
71  ItLyRC07hxMbcaguQBkl   1
72  A7wLmahMacmd6RniSE0h   1
73  cU37HwPJT7ClWoOdeIB0   1
74  Cxv3OL9bAloZXz0mUogg   3
75  5FK6Vbwq2sUGNtVEgaFU   1
76  fCMnEWhTh7kuGhOSMhTC   2
77  kEsM4qtWu3c24cxLGja3   4
78  mgLxjjWNdkpi3rxUB07l   2
79  17LEM8wPQyshaga81mOO   1
80  QQA4FUKgerUT0TLEFFgK   1
81  Ps3jaWnRHhoNNeL3PDa4   1
82  TJQ9j6A05f8ld8OK8Mzc   4
83  jtvtTOMSmoqa3cP4vWFw   1
84  3lGsczpaOxmDeZmuT7yz   1
85  oXDopHMLUvv9ZYWc4WY0   1
86  kovEJOLHZyADSgwnqPga   4
87  MJzHLwX8uDBLf5PVpvm3   1
88  gMVww8j5DaVLpC3Yj8nr   1
89  oy61qtPF4pg4R3ABVbJj   2
90  LxtXIECwYcSxnNetzXg7   1
91  jnddVA5OnRXjgyBHLhkr   2
92  jZF8v6PoTY6RXiFVy6gY   4
93  n76EcPNePczVQ85qQtbB   1
94  z8N4Pa7qb9TeTYKUwAeQ   8
95  IB0qJtGPs6xL8JRpYuBt   3
96  bjusHaMvMJEVS8XmZ80t   6
97  RFOrWXAQX1PO0HFZwlLL   3
98  xoO6skepz0KramQLSPL9   1
99  CBjFu6W7QeUIwHec5mC1   1
100 3lUidRlitol2ksRqEJvN   2
101 BgX9DZHT7atuF2UAoakM   4
102 yXJcaIASTUm1jt5BV2Mm   1
103 8FYM23YbIrj3Ofx7LMoo   2
104 uDwAuOeTAbfEsISlrm7L   1
105 QkP1503G1oAEIoPcmYmF   2
106 ASNPnjJhR3uNgopLHQ9Y   2
107 KVdaeOj3Eyn3hnPNiffK   1
108 vSgAkbmZBhLr5kGKihkG   1
109 fGcn13Dce53Ic5t7KUSy   2
110 yWx2uJPTKZJGfAOeaat6   2
111 0FX5rBebJhUn0z8tQid9   2
112 g3iCPU6zUjzgEz6cwB61   2
113 ym15ZZj8Df0uNAuodXn8   1
114 1dxR6XNJvb17STmiEGyG   1
115 8SvO5adegSRe2a8FwTg0  11
116 qy5e2BKyVAdHLE9Ft3KP   1
117 64RVc86LLeI6qccFOAs0   2
118 GFZDz69YiwKEpC8nh3Kc   2
119 nvEdRy29lvIepo6irKSa   2
120 vINjSqfdP97CnGjw7CAg   1
121 amrWtFuaQvSMbkuuP4XO   1
122 0BfdNKn6rbHBPfFmtL64   2
123 HFmXofKOwruJkX7ka6yA   3
124 cAYYkpIxMiubqvZJv80N   1
125 wQtadQgeGBUtR1EtHfet   3
126 WAWHoPe5JEKCIYk7egYV   1
127 JlC8vtBxKJRSYnZxy3cS   1
128 B4CiC8xT1jfHRpXt5XKT   1
129 hsTC8X9J3MHKvrWSPSGp   1
130 EJEY58XUQs9PBiy63T8T   3
131 WTslF06a8nHFUAWr3vIT   2
132 aEalfO2zYVQmNGz6LclE   4
133 kr9CWXPe1Jc4tybB5TDJ   1
134 QMFZxe3WbmxMlJ9c7oxx  48
135 xcMkFsNfZNXsd3qP1DVF   1
136 ZDYUvh7i71S87XwXaHCP   2
137 P0st9aEQhaLhgmDZBdhz   1
138 o24iqAR0WC7cR2ZkNHie   2
139 OmDvk4v7NxuhAnLBrkbW   2
140 gIVXFcb4XIgyVfkGHGYP   1
141 LGXgT64J11f1BZzL8rQf   1
142 9eUKJ1MDRhFJ0kdt2ikq   4
143 wvOpOK4esubuC1J3qRK9   1
144 jOtySWDeJ7rf9lxtAQzX   2
145 3LlGLQjPsYvg4P5YSea5   1
146 OQBbRgSRcYyepR1DfiXP   3
147 zPdJNnMEELaOlKvgj0xS   2
148 oF9hBAnlrGYSa56Xj8G1   3
149 zlPLQKWkCJ5fswxeAIsi   1
150 D8ziemVuGzthoise1ShM  48
151 Q6i1DNEvpyBBDntIgDg4   1
152 4FSjZtJEUXGQaNQXwR2P   4
153 TKO2Alhu9oJQR8IzF5eI   2
154 hI7JpYtbCLvNfC1JPRxp   3
155 Je7hQucSMLQWqrCCwqTD   2
156 NEzK3RrTXr3H711C5ner   1
157 zbI7AUMspFhHJsUyyaY2   1
158 izXbHR0eYoPO82zpM9ci   1
159 p9lkjNp3qQogD4OUaedm   1
160 iJuHugYdAhBzELotbBWp   3
161 BxdFCeWLf8nCNjrDcwKt   2
162 bRtADGpq7hsZ7dqIDhah   1
163 dDr1YyBAyPfLjg9qDv1Y   1
164 Mdmz1IMWbMN65ldqchyZ   2
165 7oqtXRTtqemWKjkCzH7m   2
166 HEX7q9dj3YP6yeKjY1io   1
167 pg3CssQWWIcR6REE3TFo   2
168 D3ShceKj3iyKrXmCrB7j   1
169 tGZegyyiWppuB0tUkXWz   1
170 omfSFxzu7MrjjSSafj2q   1
171 a5F2j7cvabLVMfvG55nK   4
172 O88gcs0iBczTV5V6mLTh   1
173 AhirSY1w8dBzmuo2t48W   1
174 Ayo5YHWlCQsHNV7XrQc7   3
175 d7pCGcyjbWTZyaOtM2w1   2
176 oEQ7OxQXOW1OrOwhfEPF   5
177 XGaVXviFC59TLyx7AKLq   1
178 fRN2BqpepgaxT82ExHgD   1
179 OcE6oQcbHzuzftyyrdB6   3
180 h1VVrAsMOlTSjgsxu07s   1
181 Ewp3WFDEQVhQx6UMUAiN   2
182 s0XXgsxyI4HqXAssoIP2   2
183 6UwmqiWhZgQPMStTzRH0   1
184 5rHhraHsUTAqh6sjU2d1   2
185 Yfk4ShUhELUtl9XwpgCa   7
186 54siyd3BYjsh1mVk7R0Z   1
187 LmdItKKcaTPAwe0Ym4Od   1
188 IOGwmjH1oX4unT6cb6gy   1
189 RsRxUuQovzhFUap8a01P   1
190 9fNzCWLAlFIBwlLJ0oFz   1
191 Bipzf7LJ6qdGqAscZzBg   5
192 5PP2t16GSzChbtte5vVw   1
193 7g48cSLs8jYPIKalXiUZ   1
194 KyeFByJ933id8W7P6j77   1
195 hSH8uwdznJPF9W8CTA2w   1
196 THM75FY0853siUB2wF5J   1
197 Mtt1LXmZWBninK3ggSK5   1
198 khYao3bQxAh4FNPIXDxa   1
199 w8EG0W8jl0IbL9HsENCg   1
200 4ErLxgNrw5giUuWzjjsm   1
201 iCXyy2xK8DDsgTtrf8kW   2
202 boffKPQBu09LdqOpXQOe   1
203 REcum50sJgQSYvBMQXwc   1
204 TKkwOc2pHd9PObQzxHDj   1
205 jyeyCfCN3CfT45Vmut9E   1
206 rwXh4OtqsjeCqJsJDrVf   2
207 EtulJVHuPSc3ZLVKBPtb   1
208 CFx2CdZ1bSxA6JPb6SA6   1
209 G6LvMujrQyj0EAuVo6Uq   1
210 4zCxjdZQSFAMBokcJ98T   1
211 NxDOJ5WGiu7vMzc0jfg5   3
212 fAPx69vDlA8qSfqNFaag   1
213 FQCQhjkNqqJrCXXHGWyM   1
214 KdXV17I3V0fPvMAidxdb   1
215 5KVDGaVVAHsiHJMjLWGH   1
216 RIcuhrLt8BIs1le0DQl9   1
217 3JAbXWzVHjOfIJvN5nIY   1
218 EjoIAEzk6UUhC7y9F0Ry   1
219 TJns5NZcCMEwMuva3lvg   1
220 nNv1U7RDvAlO10CNVduv   1
221 j3wPPP2j4S3VgnpmBFvH   1
222 OnWF9xAaNJRvOuX00KEc   2
223 wUFqN9bUAEkgPgUV5sqO   1
224 3HNTHcsl7dZ2TGlwR4g6   1
225 etnyKJ3NA8vLJWQgHIDJ   1
226 piTJXDJA6kamnbAqQVSc   1
227 YhKp6PmpkSO7X4aGjYB9   1
228 3RVHWOebZPPvYZwkVRaC   1
229 umV9t8yhNwHqLYO7llmI   2
230 LBg0xU9XZnPijXtSAo67   2
231 ekGBkEpWxMdbx2WL17xl   1
232 Q5v7vEQrx6bW7SNYTjUD   1
233 3WOzLROmRBgFy8GAfJZx   5
234 9IlG6nRRZkN1ZsoqsxCM   1
235 BdgTQ1C8QkSCuLiWUM6G   1
236 2fYxvQc1czvRDcT8JM7B   2
237 McZsAbJxyBZkxN6R06tL   1
238 Gm5YDXVt591FIqCgxMtr  16
239 Fvv0ALwZPTKLL7OVVBmn   1
240 2pScWifucpmQZvXoZCw3   1
241 tKTrELf8YVSKMU6GH0tn   1
242 s7mJzZjHp4ae1qDeD85E   1
243 03spmysv917pRTSkTcj6   1
244 6fGC9DJqZxA4MXTQX8Sd   2
245 O0NYuwahmBnGRb5IPZGa   1
246 R81zDdBsjgGbqyqUWMQT   3
247 eBDrjMp7gbOV17PYLZad   1
248 nRnUY9CTiB7LVJe7haxE   1
249 R6M8a2s8Oin7lhCtFEhQ   1
250 eO2fxGLcdC5k0aGuROZx   1
251 I9oLuP4O3GOIbYravzP8   1
252 g7rIRsOq2kkH8pYaz7fR   1
253 CRGZ4TavntGH5E9LSBCX   1
254 DH0T6zFub589qUF0B702   1
255 0i0wZSbTdy53z6Cni0Dl   1
256 SJdYRJAFtFnPuPXeDtZ9   1
257 rhddayHF97oSYI7UrdRt   1
258 nabsPHGZpvr6SgYzV2am   1
259 5EPXWl4PDme2kqXHiOBB   1
260 qDI6xFzx1uEgAvcPXYms   2
261 ZyEbe7eQxt4YlalJLb89   2
262 JhW3ezpIB8sBZJ76QQ2b   1
263 4CLdS8XZEmJVDlHImT7u   1
264 3TUTJUD20hg4uydW0nPU   1
265 tLdDkwsFunR4YoLKVhDr   1
266 PYH1CXUkU4mAxBsW5UHi   1
267 G2WGBZc9GyTIFNdsysZC   1
268 yL2xNKGqpeaOzg95CDUB   1
269 zKG5mSoyPstUeC99enq5   1
270 AsoaxzIykTyxqAoV4YQr   1
271 bW7vftpeg6L47YzZjzWX   1
272 cRpM8Z159NED2UYcb3jT   1
273 roz2c3opqAFnyNPbzR3h   1
274 qpQ1vSLveBFouxZzN2iu   1
275 076BrNISK0IP8PsESVQX   1
276 6rPerw3fPtggey7LPj6X   1
277 zdKF1SXibeBH26CpiufK   1
278 i8uVNjD6U5P2koFh3qw1   1
279 HQtaLSwh8MGTTpLVllOE   2
280 qexjC6y4MMUWHAt5bqvh   1
281 gYlhCVSj5pa1VFbFdicj   2
282 hmUKEUxhdCzEzo2q7PpI   1
283 ArWJ1aLAwP2t66pdDGqy   1
284 O0yVeeQVT2OJE6mbt5wl   1
285 tMR3y87RWvjTV5kdfi2h   1
286 dFi2sGOS1gEWWg2KDXcs   1
287 CVmfiQuobm1ux4zBp3l4   1
288 kSZ3wZkDtJRrYLpi4ojs   1
289 LT2PWfa1d0t3mjn0w4KZ   1
290 j1lSAtVBMhimMpC1Ha2o   1
291 4MXqlRYjANDHSM003I2c   1
292 9NyaXPkKlfyjubys7IoE   1
293 g00rVq4jB6nBvbdFo9xb   1
294 BiyqZv07wmeZOboeTfnw   1
295 sUE4VAmCISZvzsFH49BK   1
296 imxFcTXtwyNUY9uOjkct   1
297 vNUhkysUUHxRDi1a5BQ7   1
298 9YaeRGOTkxRml6BYldlV   1
299 CtPuhMjKdihqEsXucpww   1
300 54TEF4eZN23KZglG8kHT   2
301 kgAJm1lblz7JIf8qQqZd   1
302 azeC5Kk3x946Oj4L6HnU   1
303 uKYfZr65pq4KTBvCj3dE   1
304 hOdVHTzPBsd26UMRFL3Q   1
305 VLLHim4Q2j7wFMmMQbHq   1
306 jdJRtSyyTamNP0WYAaei   1
307 5akYQwXPqMXUdUwTlseA   1
308 3b8X79WU0YWVcsmFGeEH   4
309 eNXtdvWDFDTA7Xrc5UTI   1
310 IIeCbY9dM0C04giDl66U   1
311 Rw1m2pue8CmVp1Gbe9Aj   1
312 SqhyFLTUrs6u8geASTKe   2
313 p7jxXch3zyEvD9B92JRQ   1
314 mCN7iUcxW0yZqmQaO7U8   2
315 ct6awrymUS8RgzTgYjKx   2
316 GPD6F9DZ5KZ649zqEkmE   2
317 JYNcLggG6xeng7vhONOS   1
318 QygIO2O30zG9kOeA6yaW   1
319 E89vWsrHcs2BX0H9x10k   1
320 BvKCMACzXtxloOwf0FNW   1
321 GoEd9Sf53GRx8ffiYeJA   1
322 3G6evfXk2aaHFUO4NsWt   3
323 XZ6kYLrylUTUVmi9Moii   1
324 GexzYjhJP1cjPlyIYmBj   1
325 YgxWHqtXkNX2ukZ9kiCy   1
326 T8uRDr68JjJ4BQT3iIty   1
327 qXLy4pIlDDDoNenqCw3e   1
328 UIFwra15oVwoFsQMfzB2   1
329 I6mfBMKbR5exUiCNwo3s   1
330 iqav0EdhDGMWKHeygaoS   1
331 9f0qLvOeqUpquuahieMQ   1
332 1EicOlsQbZR2weQYUSE4   1
333 HtYDZw69CrxG7YXipN2I   4
334 klZuuzk47ZvpyRkPJaZf   1
335 yMeSz76Rr9eoJcLNUcyC   2
336 KDppLvc9sRPP1RRTXUbx   1
337 NH3PiPNoQ05mlw2FESiA   1
338 XcEGK0YT24vUTt758M2g   1
339 9nohyzDvZOZcWfHHxyyl   1
340 jtLHDBCHTQmFdAKk960m   1
341 3v8cpIfuZbk4rsihgtbl   1
342 qcx2RIuXihoDjqT84xfl   1
343 Dww6f9XWMbmfz4VOw6gr   2
344 SC2x1sOCmOGfCQ69ipBT   3
345 AMdGiZCShW6RizBlKSmC   1
Code
# if you missed more than 10 items, you're getting tossed (for now)

missing_cog_items <- v5_dat |> 
  filter(is.na(score)) |>
  summarize(.by = subject_id, 
            n = n()) |>
  filter(n > 10) |>
  pull(subject_id)

v5_dat <- v5_dat |>
  filter(!(subject_id %in% missing_cog_items)) |>
  mutate(score = ifelse(is.na(score), 0, score))

saveRDS(v5_dat, here::here("Data", "v5_dat.rds"))

Search Algorithm: FPT Version 5

The FPT Version 5 includes five cognitive tasks.

  • Denominator Neglect: Combined

  • Bayesian Update: Hard

  • ADMC: Decision Rules

  • Number Series

  • Coherence Forecasting Test

  • Matrix Reasoning

  • Denominator Neglect: Separate

  • Bayesian Update: Easy

I don’t know what to do with the CFT as of now, so this will only have Denominator Neglect: Combined, Bayesian Update: Hard, ADMC: Decision Rules, Number Series.

I also don’t know what to do with Raven.

Going to add Time Series as well!

Methods

This algorithm seeks to maximize the \(R^2\) of predicting s-scores per minute for a set of cognitive task items of average testing time t.

Code
test <- data.frame(rep = 0,
                   task = "INIT",
                   item = "INIT",
                   test_r2 = 0,
                   time = 0,
                   added_r2 = 0,
                   added_time = 0,
                   r2_rate = 0)

walk(seq(1, v5_dat |> pull(item) |> unique() |> length()), 
     \(i) {test <<- v5_dat |> 
       filter(!(item %in% pull(test, item))) |>
       pull(item) |>
       unique() |> 
       map(~ rbind(v5_dat |>
                     filter(item == .x),
                   v5_dat |>
                     filter(item %in% pull(test, item))) |> 
             summarize(.by = c(task, subject_id),
                       score = mean(score),
                       sscore = first(sscore),
                       time = sum(time),
                       task = first(task)) |>
             mutate(time = time + map_dbl(task, get_startup)) |>
             mutate(.by = subject_id,
                    time = sum(time)) |> 
             mutate(formula = paste("sscore ~", task |> unique() |> paste(collapse = "+"))) |>
             pivot_wider(names_from = task, values_from = score) |>
             summarize(rep = i,
                       task = str_split_i(.x, "_", 1),
                       item = .x,
                       test_r2 = summary(lm(as.formula(first(formula)),
                                            data = pick(everything())))$r.squared,
                       added_r2 = first(test_r2) - test |>
                         head(1) |>
                         pull(test_r2),
                       added_time = first(time) - test |>
                         head(1) |>
                         pull(time),
                       time = first(time),
                       r2_rate = first(added_r2 / added_time))) |>
       list_rbind() |>
       filter(r2_rate == max(r2_rate)) |>
       rbind(test) |>
       filter(item != "INIT")}, 
     .progress = T)
test

saveRDS(test, here::here("Data", "Search Algorithms", "v5test_dat.rds"))
Code
test <- readRDS(here::here("Data", "Search Algorithms", "v5test_dat.rds"))
Code
v5test_plt <- test |>
  ggplot(aes(x = time, y = test_r2)) +
  geomtextpath::geom_textsegment(data = test |> filter(time < 10.49) |> filter(time == max(time)),
               aes(x = -Inf, xend = time, y = test_r2, yend = test_r2, label = "10 MIN"),
               color = scales::col_lighter("#202020", amount = 35), linewidth = .3, linetype = "longdash") +
  geom_segment(data = test |> filter(time < 10.49) |> filter(time == max(time)),
               aes(y = -Inf, yend = test_r2, x = time),
               color = scales::col_lighter("#202020", amount = 35), linewidth = .3, linetype = "longdash") +
  
  geomtextpath::geom_textsegment(data = filter(test, test_r2 == max(test_r2)),
               aes(x = -Inf, xend = time, y = test_r2, yend = test_r2, label = "PEAK"),
               color = scales::col_lighter("#202020", amount = 35), linewidth = .3, linetype = "longdash") +
  geom_segment(data = filter(test, test_r2 == max(test_r2)),
               aes(y = -Inf, yend = test_r2, x = time),
               color = scales::col_lighter("#202020", amount = 35), linewidth = .3, linetype = "longdash") +
  geom_line() +
  geom_point(aes(color = task), size = 2) +
  
  annotate("text", label = paste0(test |> 
                                    filter(time < 10.49) |> filter(test_r2 == max(test_r2)) |> 
                                    pull(time) |> round(1),
                                  " minutes:\n• ",
                                  test |> filter(time < 10.49) |>
                                    count(task) |>
                                    pmap_chr(\(task, n) paste(n, task)) |> 
                                    paste(collapse = "\n• ")),
           x = 8.2, y = 0.2, size = 3.4, hjust = "left", color = "#202020") +
  annotate("text", label = paste0(filter(test, test_r2 == max(test_r2)) |>
                                    pull(time) |> round(1), " minutes:\n• ",
                                  test |>
                                    filter(time <= filter(test, test_r2 == max(test_r2)) |>
                                             pull(time)) |>
                                    count(task) |>
                                    pmap_chr(\(task, n) paste(n, task)) |> 
                                    paste(collapse = "\n• ")),
           x = 26.6, y = 0.25, size = 3.4, hjust = "left", color = "#202020") +
  
  coord_cartesian(xlim = c(0, 45), ylim = c(0, 0.8), expand = c(0, 1)) +
  guides(x = guide_axis(cap = "both"),
         y = guide_axis(cap = "both")) +
  labs(x = "Time (minutes)", y = "Test R^2", color = "Task") +
  theme_classic()  +
       theme(
         panel.background = element_rect(fill='transparent'),
         plot.background = element_rect(fill='transparent', color=NA),
         panel.grid.major = element_blank(),
         panel.grid.minor = element_blank(),
         legend.background = element_blank())

saveRDS(v5test_plt, here::here("Figures", "Search Algorithms", "v5test_plt.rds"))
v5test_plt 

As info, this still does not have any within-task difference in item time. Currently (total time from paper - startup time) / number of items.

Same Order of Items, Randomly Selected

Code
test_random <- data.frame(rep = 0,
                          iter = 0,
                          task = "INIT",
                          item = "INIT",
                          test_r2 = 0,
                          time = 0,
                          added_r2 = 0,
                          added_time = 0,
                          r2_rate = 0)

walk(1:100, 
     ~ {test_iter <- data.frame(rep = 0,
                                iter = 0,
                                task = "INIT",
                                item = "INIT",
                                test_r2 = 0,
                                time = 0,
                                added_r2 = 0,
                                added_time = 0,
                                r2_rate = 0)
     
     test |>
       arrange(rep) |>
       select(cur_rep = rep, cur_task = task) |>
       pwalk(\(cur_rep, cur_task) {
         
         random_item <- v5_dat |> 
           filter(task == cur_task & !(item %in% pull(test_iter, item))) |>
           pull(item) |>
           unique() |>
           sample(1)
         
         test_iter <<- rbind(v5_dat |>
                               filter(item == random_item),
                             v5_dat |>
                               filter(item %in% pull(test_iter, item))) |>
           summarize(.by = c(task, subject_id),
                     score = mean(score),
                     sscore = first(sscore),
                     time = sum(time),
                     task = first(task)) |>
           mutate(time = time + map_dbl(task, get_startup)) |>
           mutate(.by = subject_id,
                  time = sum(time)) |> 
           mutate(formula = paste("sscore ~", task |> unique() |> paste(collapse = "+"))) |>
           pivot_wider(names_from = task, values_from = score) |>
           summarize(iter = .x,
                     rep = cur_rep,
                     task = cur_task,
                     item = random_item,
                     test_r2 = summary(lm(as.formula(first(formula)),
                                          data = pick(everything())))$r.squared,
                     added_r2 = first(test_r2) - test_iter |>
                       head(1) |>
                       pull(test_r2),
                     added_time = first(time) - test_iter |>
                       head(1) |>
                       pull(time),
                     time = first(time),
                     r2_rate = first(added_r2 / added_time)) |>
           rbind(test_iter) |>
           filter(item != "INIT")
       })
     
     test_random <<- rbind(test_random, test_iter) |>
  filter(item != "INIT")},
  .progress = T) 

saveRDS(test_random, here::here("Data", "Search Algorithms", "v5test-random_dat.rds"))
Code
test_random <- readRDS(here::here("Data", "Search Algorithms", "v5test-random_dat.rds"))
Code
v5test_random_plt <- test_random |>
  ggplot(aes(x = time, y = test_r2)) +
  geomtextpath::geom_textsegment(
    data = filter(test_random |> 
                    summarize(.by = time,
                              test_r2 = mean(test_r2),
                              task = first(task)),
                  test_r2 == max(test_r2)),
    aes(x = -Inf, xend = time, y = test_r2, yend = test_r2, label = "PEAK"),
    color = scales::col_lighter("#202020", amount = 35), linewidth = .3, linetype = "longdash") +
  geom_segment(
    data = filter(test_random |> 
                    summarize(.by = time,
                              test_r2 = mean(test_r2),
                              task = first(task)),
                  test_r2 == max(test_r2)),
    aes(y = -Inf, yend = test_r2, x = time),
    color = scales::col_lighter("#202020", amount = 35), linewidth = .3, linetype = "longdash") +
  geom_line(aes(group = iter), alpha = .14, linewidth = .4, 
            color = "#202020") +
  geom_line(data = test_random |> summarize(.by = time,
                                            test_r2 = mean(test_r2)),
            aes(x = time, y = test_r2), color = "#202020") +
  geom_point(data = test_random |> summarize(.by = time,
                                             test_r2 = mean(test_r2),
                                             task = first(task)),
             aes(x = time, y = test_r2, color = task),
             size = 2) +
  guides(x = guide_axis(cap = "both"),
         y = guide_axis(cap = "both")) +
  labs(x = "Time (minutes)", y = "Test R^2") +
  coord_cartesian(ylim = c(0, 0.6), xlim = c(0, 45)) +
  theme_classic()  +
  theme(
    panel.background = element_rect(fill='transparent'),
    plot.background = element_rect(fill='transparent', color=NA),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    legend.background = element_blank())

saveRDS(v5test_random_plt, here::here("Figures", "Search Algorithms", "v5test_random_plt.rds"))
v5test_random_plt

Idea: what if as a robustness check we rerun the search alg making its first item be from a specific task. Nowhere close to all possible combinations, but might be something.

Code
v5_dat |> pull(task) |> unique() |>
  walk(\(first_task) {
    test <<- data.frame(first_task = "INIT",
                   rep = 0,
                   task = "INIT",
                   item = "INIT",
                   test_r2 = 0,
                   time = 0,
                   added_r2 = 0,
                   added_time = 0,
                   r2_rate = 0)
    
    print(first_task)
    
    walk(seq(1, v5_dat |> pull(item) |> unique() |> length()), 
         \(i) {
           if (test |> filter(time == max(time)) |> pull(time) > 10) {Sys.sleep(0)}
           else {test <<- v5_dat |> 
             filter(!(item %in% pull(test, item))) |>
             filter((i == 1 & task == first_task) | i > 1) |>
             pull(item) |>
             unique() |> 
             map(~ rbind(v5_dat |>
                           filter(item == .x),
                         v5_dat |>
                           filter(item %in% pull(test, item))) |> 
                   summarize(.by = c(task, subject_id),
                             score = mean(score),
                             sscore = first(sscore),
                             time = sum(time),
                             task = first(task)) |>
                   mutate(time = time + map_dbl(task, get_startup)) |>
                   mutate(.by = subject_id,
                          time = sum(time)) |> 
                   mutate(formula = paste("sscore ~", task |> unique() |> paste(collapse = "+"))) |>
                   pivot_wider(names_from = task, values_from = score) |>
                   summarize(first_task = first_task,
                             rep = i,
                             task = str_split_i(.x, "_", 1),
                             item = .x,
                             test_r2 = summary(lm(as.formula(first(formula)),
                                                  data = pick(everything())))$r.squared,
                             added_r2 = first(test_r2) - test |>
                               head(1) |>
                               pull(test_r2),
                             added_time = first(time) - test |>
                               head(1) |>
                               pull(time),
                             time = first(time),
                             r2_rate = first(added_r2 / added_time))) |>
             list_rbind() |>
             filter(r2_rate == max(r2_rate)) |>
             rbind(test) |>
             filter(item != "INIT")}
         }, 
         .progress = T)
    
    saveRDS(test, here::here("Data", "Search Algorithms", paste0("v5test_first-", first_task, "_dat.rds")))
  })
Code
v5_dat |> pull(task) |> unique() |>
  walk(\(task) {
    test_firsttask <- here::here("Data", "Search Algorithms",
                       paste0("v5test_first-", task, "_dat.rds")) |>
      readRDS()
    
    (test_firsttask |>
      ggplot(aes(x = time, y = test_r2)) +

      geomtextpath::geom_textsegment(data = filter(test_firsttask, test_r2 == max(test_r2)),
                                     aes(x = -Inf, xend = time, y = test_r2, yend = test_r2, label = "PEAK"),
                                     color = scales::col_lighter("#202020", amount = 35), linewidth = .3, linetype = "longdash") +
      geom_segment(data = filter(test_firsttask, test_r2 == max(test_r2)),
                   aes(y = -Inf, yend = test_r2, x = time),
                   color = scales::col_lighter("#202020", amount = 35), linewidth = .3, linetype = "longdash") +
      geom_line() +
      geom_point(aes(color = task), size = 2) +
      
      annotate("text", label = paste0(filter(test_firsttask, test_r2 == max(test_r2)) |>
                                        pull(time) |> round(1), " minutes:\n• ",
                                      test_firsttask |>
                                        filter(time <= filter(test_firsttask, test_r2 == max(test_r2)) |>
                                                 pull(time)) |>
                                        count(task) |>
                                        pmap_chr(\(task, n) paste(n, task)) |> 
                                        paste(collapse = "\n• ")),
               x = 26.6, y = 0.25, size = 3.4, hjust = "left", color = "#202020") +
      
      coord_cartesian(xlim = c(0, 20), ylim = c(0, 0.8), expand = c(0, 1)) +
      guides(x = guide_axis(cap = "both"),
             y = guide_axis(cap = "both")) +
      labs(x = "Time (minutes)", y = "Test R^2", color = "Task",
           title = paste("Starting Task: ", task)) +
      theme_classic()  +
      theme(
        panel.background = element_rect(fill='transparent'),
        plot.background = element_rect(fill='transparent', color=NA),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.background = element_blank(),
        aspect.ratio = 1)) |>
      print()
  })

Mark’s idea: run with just maximizin \(R^2\) (no time in denominator)

Code
test <- data.frame(rep = 0,
                   task = "INIT",
                   item = "INIT",
                   test_r2 = 0,
                   time = 0,
                   added_r2 = 0,
                   added_time = 0,
                   r2_rate = 0)

walk(seq(1, v5_dat |> pull(item) |> unique() |> length()), 
     \(i) {test <<- v5_dat |> 
       filter(!(item %in% pull(test, item))) |>
       pull(item) |>
       unique() |> 
       map(~ rbind(v5_dat |>
                     filter(item == .x),
                   v5_dat |>
                     filter(item %in% pull(test, item))) |> 
             summarize(.by = c(task, subject_id),
                       score = mean(score),
                       sscore = first(sscore),
                       time = sum(time),
                       task = first(task)) |>
             mutate(time = time + map_dbl(task, get_startup)) |>
             mutate(.by = subject_id,
                    time = sum(time)) |> 
             mutate(formula = paste("sscore ~", task |> unique() |> paste(collapse = "+"))) |>
             pivot_wider(names_from = task, values_from = score) |>
             summarize(rep = i,
                       task = str_split_i(.x, "_", 1),
                       item = .x,
                       test_r2 = summary(lm(as.formula(first(formula)),
                                            data = pick(everything())))$r.squared,
                       added_r2 = first(test_r2) - test |>
                         head(1) |>
                         pull(test_r2),
                       added_time = first(time) - test |>
                         head(1) |>
                         pull(time),
                       time = first(time),
                       r2_rate = first(added_r2 / added_time))) |>
       list_rbind() |>
       # only difference is here.
       filter(added_r2 == max(added_r2)) |>
       rbind(test) |>
       filter(item != "INIT")}, 
     .progress = T)
test

saveRDS(test, here::here("Data", "Search Algorithms", "v5test-max-r2_dat.rds"))
Code
test_maxr2 <- readRDS(here::here("Data", "Search Algorithms", "v5test-max-r2_dat.rds"))

test_maxr2 |>
  ggplot(aes(x = time, y = test_r2)) +
  geomtextpath::geom_textsegment(data = test_maxr2 |> filter(time < 10.49) |> filter(time == max(time)),
               aes(x = -Inf, xend = time, y = test_r2, yend = test_r2, label = "10 MIN"),
               color = scales::col_lighter("#202020", amount = 35), linewidth = .3, linetype = "longdash") +
  geom_segment(data = test_maxr2 |> filter(time < 10.49) |> filter(time == max(time)),
               aes(y = -Inf, yend = test_r2, x = time),
               color = scales::col_lighter("#202020", amount = 35), linewidth = .3, linetype = "longdash") +
  
  geomtextpath::geom_textsegment(data = filter(test_maxr2, test_r2 == max(test_r2)),
               aes(x = -Inf, xend = time, y = test_r2, yend = test_r2, label = "PEAK"),
               color = scales::col_lighter("#202020", amount = 35), linewidth = .3, linetype = "longdash") +
  geom_segment(data = filter(test_maxr2, test_r2 == max(test_r2)),
               aes(y = -Inf, yend = test_r2, x = time),
               color = scales::col_lighter("#202020", amount = 35), linewidth = .3, linetype = "longdash") +
  geom_line() +
  geom_point(aes(color = task), size = 2) +
  
  annotate("text", label = paste0(test_maxr2 |> 
                                    filter(time < 10.49) |> filter(test_r2 == max(test_r2)) |> 
                                    pull(time) |> round(1),
                                  " minutes:\n• ",
                                  test_maxr2 |> filter(time < 10.49) |>
                                    count(task) |>
                                    pmap_chr(\(task, n) paste(n, task)) |> 
                                    paste(collapse = "\n• ")),
           x = 8.2, y = 0.2, size = 3.4, hjust = "left", color = "#202020") +
  annotate("text", label = paste0(filter(test_maxr2, test_r2 == max(test_r2)) |>
                                    pull(time) |> round(1), " minutes:\n• ",
                                  test_maxr2 |>
                                    filter(time <= filter(test_maxr2, test_r2 == max(test_r2)) |>
                                             pull(time)) |>
                                    count(task) |>
                                    pmap_chr(\(task, n) paste(n, task)) |> 
                                    paste(collapse = "\n• ")),
           x = 26.6, y = 0.25, size = 3.4, hjust = "left", color = "#202020") +
  
  coord_cartesian(xlim = c(0, 45), ylim = c(0, 0.8), expand = c(0, 1)) +
  guides(x = guide_axis(cap = "both"),
         y = guide_axis(cap = "both")) +
  labs(x = "Time (minutes)", y = "Test R^2", color = "Task") +
  theme_classic()  +
       theme(
         panel.background = element_rect(fill='transparent'),
         plot.background = element_rect(fill='transparent', color=NA),
         panel.grid.major = element_blank(),
         panel.grid.minor = element_blank(),
         legend.background = element_blank())
`geom_line()`: Each group consists of only one observation.
ℹ Do you need to adjust the group aesthetic?